home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE6l.s < prev    next >
Text File  |  1994-07-23  |  7KB  |  225 lines

  1.  
  2. ; Lezione6l.s    COLORE LAMPEGGIANTE TRAMITE L'USO DI UNA TABELLA con routine
  3. ;        che una volta finita la tabella la rilegge all'indietro
  4.  
  5.  
  6.     SECTION    CiriCop,CODE
  7.  
  8. Inizio:
  9.     move.l    4.w,a6        ; Execbase
  10.     jsr    -$78(a6)    ; Disable
  11.     lea    GfxName(PC),a1    ; Nome lib
  12.     jsr    -$198(a6)    ; OpenLibrary
  13.     move.l    d0,GfxBase
  14.     move.l    d0,a6
  15.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  16.  
  17.     move.l    #COPPERLIST,$dff080    ; nostra COP
  18.     move.w    d0,$dff088        ; START COP
  19.     move.w    #0,$dff1fc        ; NO AGA!
  20.     move.w    #$c00,$dff106        ; NO AGA!
  21.  
  22. mouse:
  23.     cmpi.b    #$ff,$dff006    ; Linea 255?
  24.     bne.s    mouse
  25.  
  26.     btst    #2,$dff016    ; tasto destro?
  27.     beq.s    aspetta
  28.  
  29.     bsr.w    Lampeggio    ; Fa lampeggiare il Color0 in copperlist
  30.  
  31. Aspetta:
  32.     cmpi.b    #$ff,$dff006    ; linea 255?
  33.     beq.s    Aspetta
  34.  
  35.     btst    #6,$bfe001    ; mouse premuto?
  36.     bne.s    mouse
  37.  
  38.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  39.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  40.  
  41.     move.l    4.w,a6
  42.     jsr    -$7e(a6)    ; Enable
  43.     move.l    gfxbase(PC),a1
  44.     jsr    -$19e(a6)    ; Closelibrary
  45.     rts
  46.  
  47. ;    Dati
  48.  
  49. GfxName:
  50.     dc.b    "graphics.library",0,0
  51.  
  52. GfxBase:
  53.     dc.l    0
  54.  
  55. OldCop:
  56.     dc.l    0
  57.  
  58. ;    Routine di lampeggiamento che sfrutta una TABELLA di sfumature gia'
  59. ;    pronte. La TABELLA non e' altro che una serie di words contenenti
  60. ;    i vari valori RGB che il COLOR1 dovra' assumere nei vari fotogrammi.
  61. ;    Da notare che la tabella viene "letta" in questo modo: si parte col
  62. ;    copiare la prima word, poi ogni volta che viene rieseguita nei
  63. ;    fotogrammi seguenti la routine copia la seconda word, la terza, la
  64. ;    quarta e cosi' via, fino a che non giunge all'ultimo valore della
  65. ;    tabella, alla label FINECOLORTAB, allora inverte la direzione col
  66. ;    BCHG.B    #1,DIREZFLAG, e procede leggendo "all'indietro" ogni volta
  67. ;    fino a che non torna alla prima word, allora cambia ancora DIREZFLAG
  68. ;    e riprende leggendo "in avanti".
  69. ;    NOTA: questa routine e' utile quando i valori in "aumento" della
  70. ;    tabella, una volta raggiunto il "massimo", calano in maniera uguale
  71. ;    a come sono aumentati: in questo caso, avremmo dovuto scrivere
  72. ;    una tabella di questo tipo:
  73. ;
  74. ;    dc.w    0,1,2,3,4,5,6,7,8,9,10 ; progressione fino al massimo
  75. ;    dc.w    10,9,8,7,6,5,4,3,2,1,0 ; calo fono al minimo
  76. ;
  77. ;    Ma con questa routine si puo' scrivere la sola meta' della TABELLA,
  78. ;    ossia fino al 10, sara' la routine a "tornare indietro" una volta
  79. ;    raggiunto il massimo: 9,8,7,6,5,4..., risparmiando spazio nel
  80. ;    listato, e tempo se i valori sono scritti "a mano".
  81. ;    Se la tabella invece non era "speculare", ossia di questo tipo:
  82. ;
  83. ;    dc.b    0,2,3,5,6,7,8,9,10
  84. ;    dc.b    9,8,7,6,4,3,2,1,0
  85. ;
  86. ;    Sarebbe stata usata una routine che legge tutta la tabella, dal primo
  87. ;    valore all'ultimo, ma che anziche' rileggere all'indietro una volta
  88. ;    raggiunto il termine, ricominci da capo.
  89.  
  90. Lampeggio:
  91.     BTST    #1,DIREZFLAG    ; dobbiamo leggere in avanti all'indietro le
  92.     BEQ.S    GIUT2        ; word della tabella??
  93. SUT2:
  94.     SUBQ.L    #2,COLTABPOINT    ; Fai puntare alla word precedente
  95.     MOVE.L    COLTABPOINT(PC),A0 ; indirizzo contenuto in long COLTABPOINT
  96.                    ; copiato in a0
  97.     CMP.L    #COLORTAB,A0    ; Siamo arrivati al primo valore della TABELLA?
  98.     BNE.S    NOBSTART2
  99.     BCHG.B    #1,DIREZFLAG    ; cambia direzione, vai in avanti!
  100. NOBSTART2:
  101.     MOVE.W    (A0),COLORE0    ; copia la word dalla tabella al colore COP
  102.     rts
  103.  
  104. GIUT2:
  105.     ADDQ.L    #2,COLTABPOINT       ; Fai puntare alla prossima word
  106.     MOVE.L    COLTABPOINT(PC),A0 ; Indirizzo in COLTABPOINT copiato in a0
  107.     CMP.L    #FINECOLORTAB-2,A0 ; Siamo all'ultima word della TAB?
  108.     BNE.S    NONCAMBDIREZ       ; Se non ancora, non cambiare nulla
  109.     BCHG.B    #1,DIREZFLAG       ; cambia direzione, vai all'indietro!
  110. NONCAMBDIREZ:
  111.     MOVE.W    (A0),COLORE0    ; coopia la word dalla tabella al colore COP
  112.     rts
  113.  
  114. DIREZFLAG:            ; Label FLAG usata per indicare la direzione
  115.     DC.W    0        ; di lettura.
  116.  
  117.  
  118. COLTABPOINT:            ; Questa longword "PUNTA" a COLORTAB, ossia
  119.     dc.l    COLORTAB-2    ; contiene l'indirizzo di COLORTAB. Terra'
  120.                 ; l'indirizzo del'ultima word "letta" dentro
  121.                 ; la tabella.
  122.  
  123. ;    La tabella con i valori "precalcolati" del lampeggiamento di color0
  124.  
  125. COLORTAB:
  126.     dc.w    $000,$000,$001,$011,$011,$011,$012,$012    ; inizio SCURO
  127.     dc.w    $022,$022,$022,$023,$023
  128.     dc.w    $033,$033,$034
  129.     dc.w    $044,$044
  130.     dc.w    $045,$055,$055
  131.     dc.w    $056,$056,$066,$066,$066
  132.     dc.w    $167,$167,$177,$177,$177,$177,$177
  133.     dc.w    $278,$278,$278,$288,$288,$288,$288,$288
  134.     dc.w    $389,$389,$399,$399,$399,$399
  135.     dc.w    $39a,$39a,$3aa,$3aa,$3aa
  136.     dc.w    $3ab,$3bb,$3bb,$3bb
  137.     dc.w    $4bc,$4cc,$4cc,$4cc
  138.     dc.w    $4cd,$4cd,$4dd,$4dd,$4dd
  139.     dc.w    $5de,$5de,$5ee,$5ee,$5ee,$5ee
  140.     dc.w    $6ef,$6ff,$6ff,$7ff,$7ff,$8ff,$8ff,$9ff    ; ,massimo CHIARO
  141. FINECOLORTAB:
  142.  
  143.  
  144.     SECTION    GRAPHIC,DATA_C
  145.  
  146. COPPERLIST:
  147.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  148.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  149.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  150.     dc.w    $13e,0
  151.  
  152.     dc.w    $8E,$2c81    ; DiwStrt
  153.     dc.w    $90,$2cc1    ; DiwStop
  154.     dc.w    $92,$38        ; DdfStart
  155.     dc.w    $94,$d0        ; DdfStop
  156.     dc.w    $102,0        ; BplCon1
  157.     dc.w    $104,0        ; BplCon2
  158.     dc.w    $108,0        ; Bpl1Mod
  159.     dc.w    $10a,0        ; Bpl2Mod
  160.             ; 5432109876543210
  161.     dc.w    $100,%0000001000000000    ; 0 bitplane LOWRES
  162.  
  163.     dc.w    $180,$000    ; color0
  164.  
  165.     dc.w    $a007,$fffe    ; Wait linea $a0
  166.     dc.w    $180
  167. COLORE0:
  168.     dc.w    $000    ; color0
  169.  
  170.     dc.w    $c007,$fffe    ;Wait linea $c0
  171.     dc.w    $180,$000    ; color0
  172.  
  173.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  174.  
  175.     end
  176.  
  177. Questa e' una delle tante varianti della routine che legge i valori da una
  178. tabella. Questa routine puo' essere usata solo nei casi di tabelle "a specchio"
  179. ossia con valori crescenti uguali a quelli decrescenti con il "massimo"
  180. raggiunto proprio nel mezzo.
  181. L'effetto infatti e' piu' simmetrico di quello in Lezione6i.s
  182.  
  183. Provate a cambiare TABELLA e cambiera' tutto: (Amiga+b+c+i)
  184.  
  185. COLORTAB:
  186.     dc.w $000,$100,$200,$300,$400,$500,$600,$700
  187.     dc.w $800,$900,$a00,$b00,$c00,$d00,$e00
  188.     dc.w $f00,$f10,$f20,$f30,$f40,$f50,$f60,$f70
  189.     dc.w $f80,$f90,$fa0,$fb0,$fc0,$fd0,$fe0
  190.     dc.w $ff0,$ef0,$df0,$cf0,$bf0,$af0,$9f0,$8f0
  191.     dc.w $7f0,$6f0,$5f0,$4f0,$3f0,$2f0,$1f0
  192.     dc.w $0f0,$0f1,$0f2,$0f3,$0f4,$0f5,$0f6,$0f7
  193.     dc.w $0f8,$0f9,$0fa,$0fb,$0fc,$0fd,$0fe
  194.     dc.w $0ff,$0ef,$0df,$0cf,$0bf,$0af,$09f,$08f
  195.     dc.w $07f,$06f,$05f,$04f,$03f,$02f,$01f
  196.     dc.w $00f,$10f,$20f,$30f,$40f,$50f,$60f,$70f
  197.     dc.w $80f,$90f,$a0f,$b0f,$c0f,$d0f,$e0f
  198.     dc.w $f0f,$e0e,$d0d,$c0c,$b0b,$a0a,$909,$808
  199.     dc.w $707,$606,$505,$404,$303,$202,$101,$000
  200. FINECOLORTAB:
  201.  
  202. Provate anche questa TABELLA:
  203.  
  204. COLORTAB:
  205.     dc.w 0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
  206.     dc.w $10f,$20f,$30f,$40f,$50f,$60f,$70f,$80f
  207.     dc.w $90f,$a0f,$b0f,$c0f,$d0f,$e0f,$f0f
  208.     dc.w $f1e,$f2d,$f3c,$f4b,$f5a,$f69,$f78,$f87
  209.     dc.w $f96,$fa5,$fb4,$fc3,$fd2,$fe1,$ff0
  210.     dc.w $ff0,$ff0,$fe0,$fd0,$fc0,$fb0,$fa0,$f90
  211.     dc.w $f80,$f70,$f60,$f50,$f40,$f30,$f20,$f10
  212.     dc.w $f00,$f00,$e01,$d02,$c03,$b04,$a05,$906
  213.     dc.w $807,$708,$609,$50a,$40b,$30c,$20d,$10e,15
  214.     dc.w $0f,$1f,$2f,$3f,$4f,$5f,$6f,$7f,$8f,$9f,$af
  215.     dc.w $bf,$cf,$df,$ef,$ff,$ff,$fe,$fd,$fc,$fb,$fa
  216.     dc.w $f9,$f8,$f7,$f6,$f5,$f4,$f3,$f2,$f1,$f0
  217.     dc.w $1f1,$2f2,$3f3,$4f4,$5f5,$6f6,$7f7,$8f8,$9f9
  218.     dc.w $afa,$bfb,$cfc,$dfd,$efe,$fff,$ffe,$ffd,$ffc,$ffb
  219.     dc.w $ffa,$ff9,$ff8,$ff7,$ff6,$ff5,$ff4,$ff3,$ff2,$ff1,$ff0
  220.     dc.w $fe0,$fd0,$fc0,$fb0,$fa0,$f90,$f80,$f70,$f60,$f50,$f40
  221.     dc.w $f30,$f20,$f10,$f00,$f00,$e00,$d00,$c00,$b00,$a00,$900
  222.     dc.w $800,$700,$600,$500,$400,$300,$200,$100,$0,0
  223. FINECOLORTAB:
  224.  
  225.